// 实现这个项目的构建任务

const sass = require('sass')
const loadGruntTasks = require('load-grunt-tasks')



module.exports = grunt => {
    grunt.initConfig({

        // 编译css文件
        sass: {
            options: {
                sourceMap: true,
                implementation: sass
            },
            main: {
                files: {  //目标文件
                    'dist/assets/styles/main.css': 'src/assets/styles/main.scss'
                }
            }
        },

        // 压缩css文件
        cssmin: {
            main: {
                options: {
                    mangle: false
                },
                expand: true,
                cwd: 'dist',        // 压缩那个文件夹里的文件
                src: 'dist/assets/styles/*.css',    // 压缩那个文件
                dest: 'dist',       // 放压缩后文件的文件夹
                ext: '.min.css'     // 压缩后文件的的名字
            }
        },

        // 编译js文件
        babel: {
            options: {
                sourceMap: true,
                presets: ['@babel/preset-env']
            },
            main: {
                files: {
                    'dist/assets/scripts/main.js': 'scr/assets/scripts/main.js'
                }
            }
        },

        // 压缩js文件
        uglify: {
            main: {
                files: {
                    'dist/assets/scripts/main.min.js': ['dist/assets/scripts/main.js']
                }
            }
        },

        // 压缩html文件
        htmlmin:{
            options: {
                    removeComments: true,           // 移除注释
                    removeCommentsFromCDATA: true,  // 移除来自字符数据的注释
                    collapseWhitespace: true,       // 无用空格
                    collapseBooleanAttributes: true,// 失败的布尔属性
                    removeAttributeQuotes: true,    // 移除属性引号 有些属性不可移走引号
                    removeRedundantAttributes: true,// 移除多余的属性
                    useShortDoctype: true,          // 使用短的跟元素
                    removeEmptyAttributes: true,    // 移除空的属性
                    removeOptionalTags: true        // 移除可选附加标签
                },
            main:{
                expand: true,
                cwd: 'src', 
                src: ['src/*.html'],
                dest: 'dist'
            }
        },

        // 拷贝静态文件
        copy: {
            main: {
                expand: true,
                src: 'public/**',
                dest: 'dist/'
            }
        },

        // 清除dist文件夹
        clean: {
            dist: 'dist/**'
        },

        // 监控所有文件变动
        watch: {
            css: {
                files: ['src/assets/styles/*.scss'],
                tasks: ['sass']
            },
            js: {
                files: ['src/assets/scripts/*.js'],
                tasks: ['babel']
            }
        }

    })

    // 清除dist文件
    grunt.loadNpmTasks('grunt-contrib-clean')

    // 自动加载所有的grunt插件中的任务
    loadGruntTasks(grunt)

    grunt.registryTask('default', [sass, babel, watch])
    grunt.registryTask('lint', [sass, babel])
    grunt.registryTask('compile', [sass, cssmin, babel, uglify, htmlmin])
    grunt.registryTask('build', [clean, sass, cssmin, babel, uglify, htmlmin, copy])

}
